package br.com.cast.scc.pages.veiculo;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.scc.model.DominioTipoVeiculo;
import br.com.cast.scc.model.Veiculo;
import br.com.cast.scc.service.TipoVeiculoService;
import br.com.cast.scc.service.VeiculoService;

public class CadastrarVeiculoForm extends Form<Veiculo> {

	private static final long serialVersionUID = 1L;
	
	@SpringBean(name = "tipoVeiculoServiceImpl")
	private TipoVeiculoService tipoVeiculoService;
	
	@SpringBean(name = "veiculoServiceImpl")
	private VeiculoService veiculoService;

	final private DropDownChoice<DominioTipoVeiculo> comboTipoVeiculo;
	
	private WebMarkupContainer panelCampoTerrestres;
	private WebMarkupContainer panelCampoFluviais;
	
	private RequiredTextField<String> endAcessoLink;
	private RequiredTextField<String> loginAcesso;
	private RequiredTextField<String> senhaAcesso;
	
	public CadastrarVeiculoForm(String id) {
		super(id, new CompoundPropertyModel<Veiculo>(new Veiculo()));
		
		IChoiceRenderer<DominioTipoVeiculo> render = new ChoiceRenderer<>("descricao");
		comboTipoVeiculo = new DropDownChoice<DominioTipoVeiculo>("tpVeiculo",
																   tipoVeiculoService.consultarTodos(),
																   render);
		
		//PANEL CAMPOS DE VEICULO TERRESTRE
		panelCampoTerrestres = new WebMarkupContainer("camposTerrestres");
		panelCampoTerrestres.setVisible(false);
		panelCampoTerrestres.setOutputMarkupPlaceholderTag(true);
		
		RequiredTextField<String> RNTRC = new RequiredTextField<>("rntrc");
		RequiredTextField<String> placa1 = new RequiredTextField<>("placa1");
		TextField<String> placa2 = new TextField<>("placa2");
		TextField<String> placa3 = new TextField<>("placa3");
		TextField<String> placa4 = new TextField<>("placa4");
		panelCampoTerrestres.add(RNTRC, placa1, placa2, placa3, placa4);
		
		//PANEL CAMPOS DE VEICULO FLUVIAL
		panelCampoFluviais = new WebMarkupContainer("camposFluviais");
		panelCampoFluviais.setVisible(false);
		panelCampoFluviais.setOutputMarkupPlaceholderTag(true);
		
		RequiredTextField<String> numeroEmbarcacao = new RequiredTextField<>("nuEmbarcacao");
		panelCampoFluviais.add(numeroEmbarcacao);
		
		//MUDA OS CAMPOS DA PAGINA DE ACORDO COM O 
		//TIPO DE VEICULO QUE FOI SELECIONADO NA COMBO DE 'comboTipoVeiculo'
		comboTipoVeiculo.add(new AjaxFormComponentUpdatingBehavior("change"){
			private static final long serialVersionUID = 1L;
			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				DominioTipoVeiculo tipo = comboTipoVeiculo.getModelObject();
				
				boolean isTerrestre = tipo.getCodigo()
										.equals(DominioTipoVeiculo.COD_TERRESTRE);
				
				panelCampoTerrestres.setVisible(isTerrestre);
				panelCampoFluviais.setVisible(!isTerrestre);
				
				target.add(panelCampoTerrestres, panelCampoFluviais);
			}
		});
		
		
		endAcessoLink = new RequiredTextField<>("endAcessoLink");
		loginAcesso = new RequiredTextField<>("loginAcesso");
		senhaAcesso = new RequiredTextField<>("senhaAcesso");
		
		add(comboTipoVeiculo);
		
		add(panelCampoTerrestres, panelCampoFluviais);
		
		add(endAcessoLink);
		add(loginAcesso);
		add(senhaAcesso);
	}
	
	@Override
	protected void onSubmit() {
		
		Veiculo veiculo = (Veiculo) getModelObject();
		
		String msg = "Inclusão realizada com sucesso!";
		
		veiculoService.salvar(veiculo);
		
		ConsultaVeiculoIndexPage paginaRedirecionada = 
								new ConsultaVeiculoIndexPage();
		
		paginaRedirecionada.success(msg);
		setResponsePage(paginaRedirecionada);
		
		
	}
}
